/**
 * 
 */
package baduga.client;

import baduga.client.Fasada.FC_GameEnvSwitch;
import baduga.client.Fasada.FC_NetworkBehavior;
import baduga.client.Fasada.FC_PlayerEnvSwitch;
import baduga.client.Fasada.FC_TableEnvSwitch;
import baduga.core.Core_JsonDataSchema;

/**
 * @author Janek
 *
 */
public final  class  Network_Call__Controler {
	
	
	
	private FC_NetworkBehavior netwBehaw 	= new FC_NetworkBehavior();
	private FC_TableEnvSwitch tableEnvSwi 	= new FC_TableEnvSwitch();
	private FC_PlayerEnvSwitch plaEnvSwi	= new FC_PlayerEnvSwitch();
	private FC_GameEnvSwitch gmEnvSwi		= new FC_GameEnvSwitch();
	
	/**
	 * 
	 * Funkcja zajmuje się wykonaniem pewnych operacji
	 * 
	 */
	public Core_JsonDataSchema globalSwitch(final Core_JsonDataSchema wData)
	{
		
		Core_JsonDataSchema result = null;
		
		switch(wData.getKod())
		{
			case 0x01:  //Połączenie
				result = newtowkBehawSwitch(wData);
			break;
			
			case 0x02: 
				result = playerEnvSwitch(wData);
			break;
			
			case 0x03:
				result = gameEnvSwitch(wData);
			break;
			
			case 0x04:
				result = tableEnvSwitch(wData);
			break;
			
			default:
				result = null;
			break;
		}
		
		return result;
		
	}
	
	
	/**
	 * 
	 * Switch zajmujący się rozdziałem poleceń dot. połączenia
	 * 
	 */
	private Core_JsonDataSchema newtowkBehawSwitch(final Core_JsonDataSchema wData)
	{
		
		
		Core_JsonDataSchema result = null;
		
	
		switch(wData.getArgs()[0])
		{
			case 0x01: //Autoryzacja
				
				netwBehaw.cPlayerAuth(wData);
			break;
			
			case 0x02: //Rozłączenie
				netwBehaw.cPlayerDisc(wData);
			break;
			
			case 0x03: //Ping
				//result = gameEnvSwitch(wData);
			break;
			
			default:
				result = null;
			break;
		}

		
		
		return result;
	}
	
	/**
	 * 
	 * Switch zajmujący się rozdziałem poleceń dot. strefy użytkowej (Środowiska Gracza)
	 * 
	 */
	private Core_JsonDataSchema playerEnvSwitch(final Core_JsonDataSchema wData)
	{
		Core_JsonDataSchema result = null;
		
		
		switch(wData.getArgs()[0])
		{
			case 0x01: //Typy
				//result = newtowkBehawSwitch(wData);
			break;
			
			case 0x02: //Pobranie małej ilości stołów
				plaEnvSwi.updTableList(wData);
			break;
			
			case 0x03: //Pobranie informacji o stole
				//result = gameEnvSwitch(wData);
			break;
			
			case 0x04:	//pobranie historii o stole / graczu
				//result = tableEnvSwitch(wData);
			break;
			
			case 0x05: //pobranie ustawień o stole
				//result = tableEnvSwitch(wData);
			break;
			
			case 0x06: // pobranie ustawień stołu
				//result = tableEnvSwitch(wData);
			break;
			
			case 0x07: //zmiana pseudonimu
				//result = tableEnvSwitch(wData);
			break;
			
			default:
				result = null;
			break;
		}

		
		
		return result;
	}
	
	/**
	 * 
	 * Switch zajmujący się rozdziałem poleceń dot. strefy gry
	 * 
	 */
	private  Core_JsonDataSchema gameEnvSwitch(final Core_JsonDataSchema wData)
	{
		Core_JsonDataSchema result = null;
		
		
		switch(wData.getArgs()[0])
		{
			case 0x01: //Ruch gracza (Mój)
				gmEnvSwi.playerMove(wData);
			break;
			
			case 0x02: //Ruch innego (gracza)
				gmEnvSwi.otherPlayerMove(wData);
			break;
			
			case 0x03: //Informacje z Serwera
				gmEnvSwi.gameEvent(wData);
			break;

			default:
				result = null;
			break;
		}

		
		
		return result;
	}
	
	/**
	 * 
	 * Switch zajmujący się rozdziałem poleceń dot. strefy stołu
	 * 
	 */
	private Core_JsonDataSchema tableEnvSwitch(final Core_JsonDataSchema wData)
	{
		Core_JsonDataSchema result = null;
		
		
		switch(wData.getArgs()[0])
		{
			case 0x01: //Utworzenie Stołu
				tableEnvSwi.initOwnTable(wData);
			break;
			
			case 0x02: //Dołączenie do stołu
				tableEnvSwi.jointToTable(wData);
			break;
			
			case 0x03: //Opuszczenie stołu
				tableEnvSwi.leftTable(wData);
			break;
			
			case 0x04: //Stan gotowości
				tableEnvSwi.readySubmitStat(wData);
			break;
			
			case 0x05: //Migracja wew. w stole
				tableEnvSwi.intMigrationTable(wData);
			break;
			
			case 0x06: //BroadCast
				tableEnvSwi.catchBroadcast(wData);
			break;
			
			case 0x07: //PlayerContentChange
				tableEnvSwi.playerContentUpdate(wData);
			break;

			default:
				result = null;
			break;
		}

		
		
		return result;
	}

}
